Django Testing এবং Debugging

Web Development - জ্যাঙ্গো (Django)
219

Django তে Testing এবং Debugging দুটি গুরুত্বপূর্ণ প্রসেস, যা অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় কোডের গুণমান নিশ্চিত করতে এবং ত্রুটি সনাক্ত করতে সহায়ক। Django একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক এবং ডিবাগিং টুলস প্রদান করে যা আপনাকে অ্যাপ্লিকেশনের ভুল শনাক্ত করতে এবং সঠিকভাবে কার্যকর কোড তৈরি করতে সাহায্য করবে।


Django Testing

Django তে টেস্টিং একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, কারণ এটি আপনার অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করছে কি না তা নিশ্চিত করতে সাহায্য করে। Django টেস্টিং ফ্রেমওয়ার্কটি Python এর unittest মডিউল উপর ভিত্তি করে তৈরি হয়েছে, যা আপনাকে টেস্ট ক্যাস এবং টেস্ট কেসগুলির জন্য সহজ উপায় প্রদান করে।

১. Django Testing এর জন্য প্রয়োজনীয় ফাইল

আপনার Django অ্যাপ্লিকেশনটিতে টেস্টিং শুরু করার জন্য, আপনাকে একটি tests.py ফাইল তৈরি করতে হবে যেখানে আপনি আপনার টেস্টগুলি লিখবেন।

# myapp/tests.py
from django.test import TestCase
from .models import Author

class AuthorTestCase(TestCase):
    def setUp(self):
        # টেস্টের আগে যা কিছু সেটআপ করতে হবে
        Author.objects.create(name="John Doe", birth_date="1985-06-15")

    def test_author_name(self):
        """Author এর নাম ঠিকভাবে সেট হচ্ছে কিনা তা পরীক্ষা করুন"""
        author = Author.objects.get(name="John Doe")
        self.assertEqual(author.name, 'John Doe')

    def test_author_birth_date(self):
        """Author এর জন্ম তারিখ সঠিকভাবে সেট হচ্ছে কিনা তা পরীক্ষা করুন"""
        author = Author.objects.get(name="John Doe")
        self.assertEqual(str(author.birth_date), '1985-06-15')

২. TestCase এবং setUp মেথড

  • TestCase: এটি unittest.TestCase থেকে বংশগত এবং Django টেস্টিং ফ্রেমওয়ার্কের একটি অংশ। এটি টেস্ট কেসের জন্য সমস্ত প্রাথমিক সেটআপ এবং টেস্ট ফাংশনকে চালানোর সুবিধা প্রদান করে।
  • setUp: এই মেথডটি টেস্ট কেসের পূর্বে প্রাথমিক সেটআপ করতে ব্যবহৃত হয়। যেমন, ডেটাবেসে কিছু ডামি ডেটা তৈরি করা।

৩. টেস্ট রান করা

Django অ্যাপ্লিকেশনের টেস্ট চালানোর জন্য, আপনাকে Django কমান্ড ব্যবহার করতে হবে:

python manage.py test

এটি সমস্ত টেস্ট কেস রান করবে এবং রেজাল্ট দেখাবে।

৪. অন্যান্য টেস্ট ফিচার

  • Test Client: Django আপনাকে TestClient ব্যবহার করে HTTP রিকোয়েস্ট পাঠানোর এবং রেসপন্স যাচাই করার সুযোগ দেয়। এটি আপনার ওয়েব অ্যাপ্লিকেশন টেস্ট করতে উপকারী।
from django.test import Client

class SimpleTest(TestCase):
    def test_view(self):
        client = Client()
        response = client.get('/some_url/')
        self.assertEqual(response.status_code, 200)
  • Form Testing: Django টেস্ট ফর্ম সাবমিশন এবং ফর্ম ভ্যালিডেশনও সমর্থন করে।
from myapp.forms import AuthorForm

class AuthorFormTest(TestCase):
    def test_form_valid(self):
        form_data = {'name': 'John Doe', 'birth_date': '1985-06-15'}
        form = AuthorForm(data=form_data)
        self.assertTrue(form.is_valid())

Django Debugging

Debugging হচ্ছে কোডের ত্রুটি বা সমস্যাগুলি সনাক্ত এবং ঠিক করার প্রক্রিয়া। Django তে কিছু ডিবাগিং টুলস এবং পদ্ধতি রয়েছে যা আপনাকে ত্রুটির দ্রুত সমাধান করতে সাহায্য করবে।

১. Django Debug Mode

Django ডিফল্টভাবে debug mode চালু রাখে যখন আপনি ডেভেলপমেন্ট পরিবেশে কাজ করেন। settings.py ফাইলে DEBUG = True থাকলে এটি আপনার অ্যাপ্লিকেশনকে ডিবাগ মোডে চালু করবে।

# settings.py
DEBUG = True

ডিবাগ মোডে Django অনেক গুরুত্বপূর্ণ তথ্য প্রদর্শন করে, যেমন:

  • বিস্তারিত ট্রেসব্যাক
  • কোনো ত্রুটি হলে স্ট্যাক ট্রেস
  • কনসোল বা ব্রাউজারে সমস্যা এবং তার সমাধান নির্দেশিকা

২. Django Debug Toolbar

Django Debug Toolbar একটি শক্তিশালী টুল যা ডেভেলপারদের জন্য অনেক দরকারী ইনফরমেশন প্রদর্শন করে যেমন:

  • SQL কুয়েরি লোগ
  • HTTP রিকোয়েস্ট এবং রেসপন্স হেডার
  • সেশন ডাটা, ক্যাশিং স্ট্যাটাস, এবং আরও অনেক কিছু।

এটি ইনস্টল করতে, আপনাকে প্রথমে প্যাকেজটি ইনস্টল করতে হবে:

pip install django-debug-toolbar

এরপর INSTALLED_APPS এ এটি যোগ করতে হবে:

# settings.py
INSTALLED_APPS = [
    ...
    'debug_toolbar',
    ...
]

MIDDLEWARE = [
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    ...
]

এখন আপনার Django অ্যাপ্লিকেশনে ডিবাগ টুলবারটি দেখতে পাবেন, যা ওয়েব পেজের নিচে উপস্থিত হবে।

৩. Logging

Django তে Logging ব্যবস্থাপনা একটি অপরিহার্য টুল যা ত্রুটি ট্র্যাক এবং সমস্যা সনাক্ত করতে সাহায্য করে। আপনি settings.py ফাইলে লগিং কনফিগার করে আপনার অ্যাপ্লিকেশনে লগ মেসেজ লিখতে পারেন।

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

এখন Django তে যে কোনো ডিবাগ, ইনফো, বা ত্রুটি লগ করা হবে debug.log ফাইলে।


সারাংশ

  • Testing: Django তে টেস্টিং অত্যন্ত গুরুত্বপূর্ণ, এবং TestCase ব্যবহার করে সহজেই মডেল, ভিউ এবং ফর্ম টেস্ট করা যায়। Django Test Client, Form Testing এবং Custom Test Methods এর মাধ্যমে অ্যাপ্লিকেশন টেস্ট করা যায়।
  • Debugging: Django-তে DEBUG মোড, Django Debug Toolbar এবং Logging ব্যবহার করে ত্রুটির সনাক্তকরণ এবং সমাধান করা যায়।

Django তে টেস্টিং এবং ডিবাগিং আপনাকে উন্নতমানের কোড লিখতে এবং কার্যকর অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে।

Content added By

Django অ্যাপ্লিকেশনের জন্য Unit Testing

193

Django অ্যাপ্লিকেশনে Unit Testing গুরুত্বপূর্ণ একটি অংশ, যা কোডের গুণমান বজায় রাখতে এবং নিশ্চিত করতে সহায়তা করে। Django তে ইউনিট টেস্টিং সহজ এবং শক্তিশালী, কারণ এটি Django এর নিজস্ব TestCase ক্লাস ব্যবহার করে যা Python এর unittest ফ্রেমওয়ার্কের ওপর ভিত্তি করে তৈরি। Unit Testing এর মাধ্যমে আপনি কোডের ছোট ছোট অংশগুলো (যেমন মডেল, ভিউ, ফর্ম, ইউটিলিটি ফাংশন) সঠিকভাবে কাজ করছে কিনা তা পরীক্ষা করতে পারেন।


Django তে Unit Testing শুরু করা

১. TestCase ক্লাস ব্যবহার করা

Django তে টেস্ট ক্লাস তৈরি করতে আপনাকে django.test.TestCase ক্লাস থেকে ইনহেরিট করতে হয়। এই ক্লাসটি unittest.TestCase এর উপরে নির্মিত এবং Django এর বিশেষ সুবিধাগুলো যেমন ডাটাবেস ট্রানজেকশন পরিচালনা করে।

উদাহরণ: Django মডেলের জন্য Unit Test

ধরা যাক, আমাদের একটি Post মডেল আছে যা ব্লগ পোস্টের শিরোনাম এবং বিষয়বস্তু ধারণ করে:

# models.py

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def __str__(self):
        return self.title

এই মডেলটির জন্য একটি ইউনিট টেস্ট তৈরি করতে:

# tests.py

from django.test import TestCase
from .models import Post

class PostModelTest(TestCase):

    def test_post_creation(self):
        # মডেলটি তৈরি করা
        post = Post.objects.create(title='Test Post', content='This is a test post.')
        
        # টেস্ট নিশ্চিত করা যে পোস্টটি সঠিকভাবে তৈরি হয়েছে
        self.assertEqual(post.title, 'Test Post')
        self.assertEqual(post.content, 'This is a test post.')
        self.assertTrue(isinstance(post, Post))

এখানে:

  • test_post_creation: একটি টেস্ট মেথড যা নিশ্চিত করবে যে Post মডেলটি সঠিকভাবে তৈরি হচ্ছে।
  • assertEqual: চেক করে যে দুটি মান সমান কিনা।
  • assertTrue: চেক করে যে একটি শর্ত সত্য কিনা।

২. ফর্মের জন্য Unit Test

Django তে ফর্মের টেস্টিংও খুব সহজ। ধরুন, আপনার একটি ফর্ম আছে যেটি Post মডেলের জন্য ডেটা গ্রহণ করে:

# forms.py

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

এই ফর্মের জন্য টেস্টটি হবে:

# tests.py

from django.test import TestCase
from .forms import PostForm

class PostFormTest(TestCase):

    def test_valid_form(self):
        form_data = {'title': 'Test Post', 'content': 'This is a test post.'}
        form = PostForm(data=form_data)
        
        self.assertTrue(form.is_valid())

    def test_invalid_form(self):
        form_data = {'title': '', 'content': 'This is a test post.'}
        form = PostForm(data=form_data)
        
        self.assertFalse(form.is_valid())

এখানে:

  • test_valid_form: চেক করবে যে ফর্মটি সঠিকভাবে ভ্যালিডেশন পার করছে।
  • test_invalid_form: চেক করবে যে ফর্মটি অবৈধ ডেটা গ্রহণ করছে না।

৩. ভিউয়ের জন্য Unit Test

Django তে ভিউ টেস্ট করতে হলে Client ক্লাস ব্যবহার করে HTTP রিকোয়েস্ট পাঠানো হয় এবং এর রেসপন্স চেক করা হয়।

# views.py

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'post_list.html', {'posts': posts})

এই ভিউয়ের জন্য টেস্ট হবে:

# tests.py

from django.test import TestCase
from django.urls import reverse
from .models import Post

class PostListViewTest(TestCase):

    def test_view_status_code(self):
        url = reverse('post_list')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_view_contains_post(self):
        post = Post.objects.create(title='Test Post', content='This is a test post.')
        url = reverse('post_list')
        response = self.client.get(url)
        self.assertContains(response, post.title)

এখানে:

  • self.client.get(): URL এ GET রিকোয়েস্ট পাঠানো হয়।
  • self.assertEqual(response.status_code, 200): রেসপন্স কোডের মান 200 (OK) কিনা তা পরীক্ষা করা।
  • self.assertContains(response, post.title): রেসপন্সের মধ্যে পোস্টের শিরোনাম উপস্থিত কিনা তা চেক করা।

৪. URL রিভারস ব্যবহার

URL টেস্ট করার জন্য, reverse() ফাংশন ব্যবহার করা হয় যাতে URL গুলি হার্ডকোড না করতে হয়। উদাহরণস্বরূপ:

# views.py

from django.urls import reverse

# views.py তে
def post_list(request):
    ...
    return render(request, 'post_list.html', {'posts': posts})

এখন, URL টেস্ট:

# tests.py

from django.test import TestCase
from django.urls import reverse

class URLTest(TestCase):

    def test_url_resolves_to_correct_view(self):
        url = reverse('post_list')  # URL নাম ব্যবহার
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

Django Unit Testing চালানো

ডjango ইউনিট টেস্ট চালানোর জন্য, python manage.py test কমান্ড ব্যবহার করা হয়। এটি সমস্ত টেস্ট ফাইল এবং টেস্ট কেস অনুসন্ধান করে এবং টেস্ট চালায়।

python manage.py test

আপনি নির্দিষ্ট অ্যাপের টেস্ট ফাইলও চালাতে পারেন:

python manage.py test app_name

Unit Testing এর সুবিধা

  • কোডের গুণমান নিশ্চিতকরণ: ইউনিট টেস্টিং কোডের সঠিক কার্যকারিতা নিশ্চিত করে।
  • ব্যাপী পরিবর্তন সহজ করা: কোডে পরিবর্তন আনার পর, টেস্ট চালিয়ে দেখতে পারেন যে পূর্বের কার্যকারিতা নষ্ট হয়নি।
  • ডিবাগিং সহজ করা: যখন কোনো ত্রুটি হয়, টেস্ট কেসের মাধ্যমে তা দ্রুত শনাক্ত করা যায়।

সারাংশ

Django তে ইউনিট টেস্টিং ব্যবহার করে আপনি মডেল, ফর্ম, ভিউ এবং অন্যান্য অংশের কার্যকারিতা নিশ্চিত করতে পারেন। Django এর বিল্ট-ইন TestCase ক্লাস এবং Client ক্লাস আপনাকে সহজে ইউনিট টেস্ট লেখার এবং চালানোর সুবিধা প্রদান করে। ইউনিট টেস্টিং কোডের গুণমান উন্নত করতে সাহায্য করে এবং অ্যাপ্লিকেশন ডেভেলপমেন্টে সঠিকতার গ্যারান্টি প্রদান করে।

Content added By

Django এর বিল্ট-ইন Test Framework

258

Django এর বিল্ট-ইন Test Framework ব্যবহার করে আপনি আপনার Django অ্যাপ্লিকেশনগুলোকে পরীক্ষা (Test) করতে পারেন। এটি unit testing এবং integration testing এর জন্য শক্তিশালী এবং সহজলভ্য টুল সরবরাহ করে, যার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের ফিচারগুলো, মডেল, ভিউ এবং ফর্ম ইত্যাদি পরীক্ষা করতে পারেন। Django এর টেস্টিং ফ্রেমওয়ার্ক Python এর unittest মডিউলের উপর ভিত্তি করে তৈরি, তবে এটি Django এর সাথে ইন্টিগ্রেটেড এবং Django অ্যাপ্লিকেশন পরীক্ষার জন্য কাস্টমাইজড কিছু ফিচার প্রদান করে।


Django Test Framework এর মূল উপাদান

১. TestCase ক্লাস

Django এর টেস্ট ফ্রেমওয়ার্কে পরীক্ষা করতে হলে আপনাকে django.test.TestCase ক্লাস ব্যবহার করতে হবে। এটি একটি বিশেষ unit test ক্লাস যা আপনার টেস্টগুলোকে পরিচালনা করতে সহায়তা করে।

TestCase ক্লাস ব্যবহার করে, আপনি প্রতিটি ভিউ বা মডেলের জন্য একটি টেস্ট ফাংশন তৈরি করতে পারেন। Django এর TestCase ক্লাস ডাটাবেসের সাথে কাজ করার সময় মক ডাটাবেস তৈরি করে, ফলে প্রকৃত ডাটাবেসে কোন পরিবর্তন না করেই টেস্ট করা যায়।

২. TestCase ক্লাসের উদাহরণ

from django.test import TestCase
from django.urls import reverse
from .models import Post

class PostModelTest(TestCase):

    def test_create_post(self):
        # একটি পোস্ট তৈরি করা
        post = Post.objects.create(title='Test Post', content='This is a test post.')
        
        # পোস্টটি ডাটাবেসে সঠিকভাবে সংরক্ষিত হয়েছে কিনা পরীক্ষা করা
        self.assertEqual(post.title, 'Test Post')
        self.assertEqual(post.content, 'This is a test post.')

class PostViewTest(TestCase):

    def test_post_list_view(self):
        # প্রথমে কিছু পোস্ট তৈরি করুন
        Post.objects.create(title='Test Post 1', content='Content 1')
        Post.objects.create(title='Test Post 2', content='Content 2')

        # তারপর পোস্ট লিস্ট ভিউ টেস্ট করা
        url = reverse('post_list')  # URL যেটি টেস্ট করা হবে
        response = self.client.get(url)

        # সফল HTTP রেসপন্স পাওয়া কিনা পরীক্ষা করা
        self.assertEqual(response.status_code, 200)

        # পোস্টগুলির শিরোনাম টেমপ্লেটে সঠিকভাবে রয়েছে কিনা পরীক্ষা করা
        self.assertContains(response, 'Test Post 1')
        self.assertContains(response, 'Test Post 2')

এখানে:

  • test_create_post: এটি একটি unit test, যা নতুন পোস্ট তৈরি করার জন্য মডেল টেস্ট করছে।
  • test_post_list_view: এটি একটি integration test, যা একটি ভিউয়ের মাধ্যমে ডেটা লোড এবং প্রদর্শন করার প্রক্রিয়া পরীক্ষা করছে।

৩. setUp এবং tearDown মেথড

Django এর TestCase ক্লাসে আপনি setUp এবং tearDown মেথডগুলোও ব্যবহার করতে পারেন। setUp মেথডটি টেস্ট শুরুর আগে চালিত হয় এবং tearDown মেথডটি টেস্ট শেষ হওয়ার পর চালিত হয়। এগুলোর মাধ্যমে আপনি টেস্ট চলাকালীন যেকোনো প্রস্তুতি বা পরিস্কারকরণ কাজ করতে পারেন।

from django.test import TestCase

class MyTestCase(TestCase):

    def setUp(self):
        # টেস্টের জন্য ডাটাবেসে ডাটা তৈরি করা
        self.user = User.objects.create_user(username='testuser', password='password')

    def test_user_created(self):
        # নিশ্চিত করা যে ব্যবহারকারী ডাটাবেসে তৈরি হয়েছে
        self.assertEqual(self.user.username, 'testuser')

    def tearDown(self):
        # টেস্ট শেষে ডাটাবেস ক্লিনআপ
        self.user.delete()

এখানে:

  • setUp: টেস্ট শুরুর আগে একটি নতুন ব্যবহারকারী তৈরি করা হয়েছে।
  • tearDown: টেস্ট শেষে সেই ব্যবহারকারী ডিলিট করা হয়েছে।

৪. Django টেস্ট ক্লায়েন্ট

Django এর Test Client এর মাধ্যমে আপনি HTTP রিকোয়েস্টগুলো করতে পারেন এবং সেগুলোর রেসপন্স চেক করতে পারেন। এটি খুবই উপকারী যখন আপনি ভিউ বা API রেসপন্স টেস্ট করছেন।

from django.test import TestCase
from django.urls import reverse

class PostViewTest(TestCase):

    def test_post_list_view(self):
        # পোস্ট লিস্ট ভিউতে GET রিকোয়েস্ট করা
        response = self.client.get(reverse('post_list'))
        
        # রেসপন্সের HTTP স্ট্যাটাস কোড চেক করা
        self.assertEqual(response.status_code, 200)

এখানে self.client.get() এর মাধ্যমে একটি GET রিকোয়েস্ট করা হচ্ছে এবং তার রেসপন্সের স্ট্যাটাস কোড যাচাই করা হচ্ছে।


৫. Django মডেল টেস্টিং

Django এর মডেল টেস্টিং অত্যন্ত গুরুত্বপূর্ণ। এটি আপনার মডেল ফিল্ডের বৈধতা, ফর্মের কাস্টম লজিক, মডেল মেথড এবং মডেল রিলেশনস চেক করার জন্য ব্যবহৃত হয়।

from django.test import TestCase
from .models import Post

class PostModelTest(TestCase):

    def test_title_is_required(self):
        # শিরোনাম ছাড়া পোস্ট তৈরি করা
        post = Post.objects.create(content='Test content')
        
        # নিশ্চিত করা যে, শিরোনাম ফিল্ড শূন্য না হবে
        self.assertRaises(ValueError, post.save)

এখানে:

  • test_title_is_required: এটি একটি টেস্ট যা নিশ্চিত করে যে শিরোনাম ফিল্ড শূন্য রেখে পোস্ট সেভ করা যাবে না।

৬. Django টেস্ট রান করা

টেস্টগুলো রান করতে Django এর manage.py কমান্ড ব্যবহার করতে হবে।

টেস্ট রান করার জন্য:

python manage.py test

এটি আপনার সব টেস্ট ফাইল খুঁজে বের করবে এবং সেগুলো রান করবে। সফল হলে OK বার্তা দেখাবে, আর কোনো ত্রুটি থাকলে তা বিস্তারিতভাবে দেখাবে।


সারাংশ

Django এর টেস্ট ফ্রেমওয়ার্ক সহজেই আপনার অ্যাপ্লিকেশনগুলোর ইউনিট এবং ইন্টিগ্রেশন টেস্ট পরিচালনা করতে সহায়তা করে। TestCase ক্লাস, Test Client, setUp এবং tearDown মেথড ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশন টেস্ট করতে পারেন এবং তার কার্যকারিতা নিশ্চিত করতে পারেন। Django এর বিল্ট-ইন টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি উন্নত কোড মান এবং বাগ মুক্ত অ্যাপ্লিকেশন তৈরি করতে পারেন।

Content added By

Model, View, এবং Template টেস্টিং

182

Django তে টেস্টিং একটি গুরুত্বপূর্ণ অংশ, যা আপনাকে আপনার কোডের কার্যকারিতা যাচাই করতে সাহায্য করে। Django তে টেস্টিংয়ের জন্য unittest মডিউল ব্যবহৃত হয়, তবে Django এর নিজস্ব টেস্ট ফ্রেমওয়ার্কের মাধ্যমে আরও সহজে এবং কার্যকরভাবে টেস্ট করা যায়। Django তে Model, View, এবং Template টেস্টিংয়ের জন্য কিছু বিশেষ কৌশল এবং সরঞ্জাম রয়েছে যা আপনাকে আপনার অ্যাপ্লিকেশনকে আরো স্থিতিশীল এবং নির্ভরযোগ্য করতে সহায়তা করবে।


Model টেস্টিং

Model টেস্টিং মূলত ডেটাবেসের সাথে সম্পর্কিত অপারেশন যাচাই করার জন্য ব্যবহৃত হয়। এখানে Django এর TestCase ক্লাস ব্যবহার করা হয়, যা আপনার মডেলের কার্যকারিতা পরীক্ষা করে।

১. মডেল টেস্টিং উদাহরণ

ধরা যাক, আপনার একটি Book মডেল রয়েছে:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()

    def __str__(self):
        return self.title

এখন, এর জন্য একটি টেস্ট কেস তৈরি করতে হবে:

from django.test import TestCase
from .models import Book

class BookModelTest(TestCase):
    def setUp(self):
        self.book = Book.objects.create(
            title="Django for Beginners",
            author="John Doe",
            published_date="2024-01-01"
        )

    def test_book_creation(self):
        # Book সঠিকভাবে তৈরি হয়েছে কিনা চেক করা
        book = self.book
        self.assertEqual(book.title, "Django for Beginners")
        self.assertEqual(book.author, "John Doe")
        self.assertEqual(str(book), "Django for Beginners")

    def test_book_publish_date(self):
        # বইয়ের প্রকাশনার তারিখ সঠিক কিনা পরীক্ষা করা
        book = self.book
        self.assertEqual(book.published_date, "2024-01-01")

এখানে:

  • setUp(): এই ফাংশনটি প্রতিটি টেস্ট চালানোর আগে প্রাথমিক ডেটা সেটআপ করে।
  • assertEqual(): এই ফাংশনটি মডেলের ডেটা এবং আমাদের প্রত্যাশিত ফলাফল যাচাই করে।

২. মডেল ভ্যালিডেশন টেস্ট

আপনি মডেলের ভ্যালিডেশনও টেস্ট করতে পারেন, যেমন:

def test_invalid_book(self):
    # বইয়ের অযৌক্তিক ডেটা প্রদান করে ভ্যালিডেশন চেক করা
    invalid_book = Book(title="", author="Unknown", published_date="2024-01-01")
    with self.assertRaises(ValueError):
        invalid_book.full_clean()  # মডেল ভ্যালিডেশন চালানো

View টেস্টিং

Django তে views টেস্ট করার জন্য আমরা Client ক্লাস ব্যবহার করি, যা HTTP রিকোয়েস্ট পাঠাতে সহায়তা করে এবং রেসপন্স যাচাই করতে পারে।

১. ভিউ টেস্টিং উদাহরণ

ধরা যাক, আপনার একটি home ভিউ রয়েছে যা একটি index.html টেমপ্লেট রেন্ডার করে:

from django.shortcuts import render

def home(request):
    return render(request, 'index.html')

এখন, এর জন্য একটি টেস্ট কেস তৈরি করতে হবে:

from django.test import TestCase
from django.urls import reverse

class HomeViewTest(TestCase):
    def test_home_view_status_code(self):
        url = reverse('home')  # home ভিউয়ের URL
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_home_view_template(self):
        url = reverse('home')
        response = self.client.get(url)
        self.assertTemplateUsed(response, 'index.html')

এখানে:

  • self.client.get(url): এটি HTTP GET রিকোয়েস্ট পাঠায় এবং রেসপন্স ফেরত পায়।
  • assertEqual(): এখানে স্ট্যাটাস কোড চেক করা হচ্ছে।
  • assertTemplateUsed(): টেস্ট করছে যে সঠিক টেমপ্লেট ব্যবহৃত হয়েছে কিনা।

২. ভিউ এ সঠিক কনটেন্ট টেস্ট

আপনি নিশ্চিত করতে পারেন যে, ভিউটি সঠিক কনটেন্ট রেন্ডার করছে কিনা:

def test_home_view_content(self):
    url = reverse('home')
    response = self.client.get(url)
    self.assertContains(response, "Welcome to Django!")  # রেসপন্সে সঠিক কনটেন্ট আছে কিনা

Template টেস্টিং

Django তে টেমপ্লেট টেস্টিং কিছুটা আলাদা। আপনি সাধারণত টেমপ্লেটের রেন্ডারিং যাচাই করতে পারেন, অথবা নিশ্চিত করতে পারেন যে সঠিক কনটেন্ট সঠিকভাবে প্রদর্শিত হচ্ছে।

১. টেমপ্লেট টেস্টিং উদাহরণ

from django.test import TestCase
from django.template import Context
from django.template.loader import render_to_string

class TemplateTest(TestCase):
    def test_template_rendering(self):
        context = {'name': 'Django'}
        rendered = render_to_string('index.html', context)
        self.assertIn("Welcome to Django!", rendered)  # টেমপ্লেট রেন্ডারিংয়ে সঠিক কনটেন্ট আছে কিনা

এখানে:

  • render_to_string(): এটি টেমপ্লেট রেন্ডার করে এবং আউটপুট স্ট্রিং ফেরত দেয়।
  • assertIn(): এটি যাচাই করে যে রেন্ডার করা টেমপ্লেটের মধ্যে নির্দিষ্ট টেক্সট আছে কিনা।

সারাংশ

  • Django তে Model, View, এবং Template টেস্টিং কার্যকরভাবে TestCase ক্লাস, Client ক্লাস এবং টেমপ্লেট রেন্ডারিং ব্যবহার করে করা যায়।
  • Model টেস্টিং ডেটাবেসের মডেল এবং ভ্যালিডেশন চেক করতে সহায়তা করে।
  • View টেস্টিং HTTP রিকোয়েস্টের সঠিক রেসপন্স এবং কনটেন্ট চেক করতে সহায়তা করে।
  • Template টেস্টিং টেমপ্লেটের সঠিক রেন্ডারিং এবং কনটেন্ট যাচাই করতে ব্যবহৃত হয়।

এই পদ্ধতিগুলি অনুসরণ করে আপনি Django অ্যাপ্লিকেশনগুলোর ভেতরের লজিক এবং কার্যকারিতা সঠিকভাবে টেস্ট করতে পারবেন।

Content added By

Debugging Tools এবং Techniques

198

Debugging হল কোনো কোডে ত্রুটি খুঁজে বের করা এবং তা সংশোধন করার প্রক্রিয়া। Django তে ডিবাগিংয়ের জন্য বেশ কিছু শক্তিশালী টুলস এবং কৌশল রয়েছে যা আপনাকে আপনার অ্যাপ্লিকেশনের ত্রুটি সমাধান করতে সহায়তা করবে। Django ফ্রেমওয়ার্কের মধ্যে অন্তর্নির্মিত ডিবাগিং টুলস ছাড়াও, বাইরের কিছু টুলস ব্যবহার করেও ডিবাগিং করা যায়।

এখানে Django তে ডিবাগিংয়ের জন্য কিছু জনপ্রিয় টুলস এবং কৌশল নিয়ে আলোচনা করা হলো।


১. Django Debug Mode

ডিফল্টভাবে, Django একটি debug mode প্রদান করে যা অ্যাপ্লিকেশন চলাকালে বিস্তারিত ত্রুটি বার্তা এবং স্ট্যাক ট্রেস দেখায়। এটি ডেভেলপমেন্ট পরিবেশে ডিবাগিংয়ের জন্য অত্যন্ত সহায়ক।

Debug Mode সক্রিয় করা

settings.py ফাইলে DEBUG সেটিংটি True করতে হবে, যাতে Django ত্রুটি এবং লগ মেসেজগুলি দেখায়।

# settings.py
DEBUG = True

এখানে, DEBUG = True সক্রিয় করা থাকলে Django অ্যাপ্লিকেশন ত্রুটি বার্তা দেখাবে এবং stack trace সহ সকল ত্রুটি ডিটেইলস শো করবে। তবে, প্রোডাকশন পরিবেশে এটি False রাখা উচিত, কারণ এটি নিরাপত্তার জন্য ঝুঁকিপূর্ণ হতে পারে।


২. Django Debug Toolbar

Django Debug Toolbar একটি অত্যন্ত শক্তিশালী ডিবাগিং টুল যা আপনার Django অ্যাপ্লিকেশনের উন্নত তথ্য প্রদর্শন করে। এটি আপনার পেইজের নিচে একটি টুলবার হিসেবে দেখা যাবে, যেখানে রিকোয়েস্ট, রেসপন্স, কুইরি, টেমপ্লেট এবং অন্যান্য উন্নত তথ্যের ডিটেইলস পাওয়া যাবে।

Django Debug Toolbar ইনস্টল করা

আপনি প্রথমে এটি ইনস্টল করতে হবে:

pip install django-debug-toolbar

তারপর INSTALLED_APPS এবং MIDDLEWARE তে এটি যোগ করতে হবে:

# settings.py
INSTALLED_APPS = [
    ...
    'debug_toolbar',
    ...
]

MIDDLEWARE = [
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    ...
]

এছাড়া, urls.py ফাইলে Debug Toolbar এর URL কনফিগার করতে হবে:

# urls.py
from django.urls import path, include

urlpatterns = [
    path('__debug__/', include('debug_toolbar.urls')),
    ...
]

এখন, আপনার Django অ্যাপ্লিকেশন চালু করার পর, আপনি একটি ডিবাগ টুলবার দেখতে পাবেন, যা আপনার অ্যাপ্লিকেশনের বিভিন্ন তথ্য যেমন ডাটাবেস কুইরি, টেমপ্লেট রেন্ডারিং সময়, রিকোয়েস্ট/রেসপন্স টাইম, ক্যাশিং এবং আরও অনেক কিছু প্রদর্শন করবে।


৩. Logging (লগিং)

Django তে logging এর মাধ্যমে আপনি অ্যাপ্লিকেশনের কার্যকলাপ রেকর্ড করতে পারেন এবং যেকোনো সমস্যার উৎস শনাক্ত করতে সহায়তা করতে পারেন। লগিং একটি শক্তিশালী ডিবাগিং টুল হতে পারে যা ডেভেলপমেন্ট এবং প্রোডাকশন উভয় পরিবেশেই ব্যবহার করা যায়।

Logging কনফিগারেশন

settings.py ফাইলে logging কনফিগার করে আপনি বিভিন্ন ধরনের লোগ মেসেজ যেমন info, warning, error ইত্যাদি সংগ্রহ করতে পারেন।

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

এখানে, Django এর django লোগারকে DEBUG লেভেলে কনফিগার করা হয়েছে এবং কনসোলের মাধ্যমে মেসেজগুলো প্রদর্শিত হবে। আপনি প্রয়োজনে বিভিন্ন লেভেল যেমন INFO, ERROR ইত্যাদি ব্যবহার করতে পারেন।

লোগিং ব্যবহার করা

আপনি কোডের যেকোনো জায়গায় লগ মেসেজ ব্যবহার করতে পারেন:

import logging

logger = logging.getLogger(__name__)

def my_view(request):
    try:
        # কিছু প্রক্রিয়া
        logger.info('View has started processing.')
    except Exception as e:
        logger.error(f'Error occurred: {str(e)}')

৪. Python Debugger (pdb)

pdb হল Python এর বিল্ট-ইন ডিবাগার যা ডেভেলপমেন্টের সময় কোডের মধ্যে বিরতি (breakpoint) তৈরি করতে সাহায্য করে। আপনি কোডের যেকোনো অংশে pdb.set_trace() ব্যবহার করতে পারেন, যাতে সেখানে কোড execution থেমে গিয়ে আপনাকে ইন্টারেক্টিভভাবে ভেরিয়েবল এবং ফাংশন পরিক্ষা করতে সাহায্য করবে।

pdb ব্যবহার করা

import pdb

def my_view(request):
    pdb.set_trace()  # ডিবাগিং শুরু
    # কোড যা ডিবাগ করতে চান
    user = request.user
    print(user.username)

এখন, যখন কোডের এই লাইনটি এক্সিকিউট হবে, তখন ডিবাগার আপনার কনসোলে চালু হয়ে যাবে এবং আপনি ম্যানুয়ালি ভেরিয়েবল চেক করতে বা স্টেপ বাই স্টেপ কোড এক্সিকিউট করতে পারবেন।


৫. Stack Trace এবং Exception Handling

Django এর ডিফল্ট stack trace আপনাকে ত্রুটির বিস্তারিত তথ্য প্রদান করে, যেমন যেখানে ত্রুটি ঘটেছে এবং কী কারণে তা ঘটেছে। আপনি try-except ব্লক ব্যবহার করে এক্সেপশন হ্যান্ডলিং করতে পারেন এবং এক্সেপশনের সঠিক ডিটেইলস ক্যাপচার করতে পারেন।

Exception Handling উদাহরণ:

# views.py
from django.http import HttpResponse

def my_view(request):
    try:
        # কিছু কোড
        result = 10 / 0  # ZeroDivisionError
    except ZeroDivisionError as e:
        return HttpResponse(f"Error: {str(e)}")

এখানে, ZeroDivisionError ঘটলে তা HttpResponse মাধ্যমে ব্যবহারকারীকে জানানো হবে।


সারাংশ

Django তে ডিবাগিংয়ের জন্য বেশ কিছু শক্তিশালী টুলস এবং কৌশল রয়েছে, যেমন Debug Mode, Django Debug Toolbar, Logging, pdb (Python Debugger), এবং Exception Handling। এই টুলসগুলোর মাধ্যমে আপনি কোডের সমস্যাগুলো দ্রুত এবং সঠিকভাবে চিহ্নিত করতে পারেন। ডিবাগিং কার্যক্রমকে আরও কার্যকর করতে, সঠিক টুল নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...